//	--------------------------------------------------------------------
//	Copyright(C) 2006,2007 Zhao Yukun. All rights reserved.
//	This file is a part of the Xeres system.
//	Xeres 2007
//	Contact : xeres.engine@gmail.com
//	$(reservedInfo)
//	$(reservedDeclaration)
//	--------------------------------------------------------------------
///	@file	<CValueData.cpp>
///	@path	~/src/database/xdata/
///	@date	2007/11/28
///	@desc	Encapsulates simple value entry.

#include "config/config.h"

#include "database/xdata/CValueData.h"

namespace xeres {
	
	IMPL_IOBJECT_CLASS( CValueData );

	// ctor
	CValueData::CValueData( const WString& name , VaryingDataType type )
		: m_key( Key::MakeKey( name ) )
	{
		m_data.SetType( type , true );
	}

	// dtor
	CValueData::~CValueData( void )
	{
	}

	// get type name
	const WString& CValueData::GetVarTypeName( void ) const
	{
		return m_data.GetVarTypeName();
	}

	// get type id
	const ClassID CValueData::GetVarTypeID( void ) const
	{
		return m_data.GetVarTypeID();
	}

	// GetInfo
	bool CValueData::GetInfo( DataInfo& datainfo )
	{
		datainfo.m_type = DATA_VAR;
		size_t size = 0;
		switch( m_data.GetVaryingDataType() )
		{
		case VAR_BOOL: size = sizeof(bool);
		case VAR_INT: size = sizeof(int);
		case VAR_FLOAT: size = sizeof(float);
		case VAR_PAIR: size = sizeof(Pair<float>);
		case VAR_VECTOR: size = sizeof(Vector<float>);
		case VAR_QUAT: size = sizeof(Quat<float>);
		case VAR_COLOR: size = sizeof(Color4);
		case VAR_MATRIX: size = sizeof(Matrix<float>);
		case VAR_STRING: size = 0;

		default:
			assert(false);
			__assume(false);
		}
		datainfo.m_created = 0;
		datainfo.m_accessed = 0;
		datainfo.m_modified = 0;
		return true;
	}

	// set value
	bool CValueData::SetBool( bool val )
	{
		return m_data.SetBool( val );
	}
	bool CValueData::SetInt( int val )
	{
		return m_data.SetInt( val );
	}
	bool CValueData::SetFloat( float val )
	{
		return m_data.SetFloat( val );
	}
	bool CValueData::SetPair( const Pair<float>& val )
	{
		return m_data.SetPair( val );
	}
	bool CValueData::SetVector( const Vector<float>& val )
	{
		return m_data.SetVector( val );
	}
	bool CValueData::SetQuat( const Quat<float>& val )
	{
		return m_data.SetQuat( val );
	}
	bool CValueData::SetColor( const Color4& val )
	{
		return m_data.SetColor( val );
	}
	bool CValueData::SetMatrix( const Matrix<float>& val )
	{
		return m_data.SetMatrix( val );
	}
	bool CValueData::SetString( const WString& val )
	{
		return m_data.SetString( val );
	}

	// get value
	bool CValueData::GetBool( bool& val ) const
	{
		return m_data.GetBool( val );
	}
	bool CValueData::GetInt( int& val ) const
	{
		return m_data.GetInt( val );
	}
	bool CValueData::GetFloat( float& val ) const
	{
		return m_data.GetFloat( val );
	}
	bool CValueData::GetPair( Pair<float>& val ) const
	{
		return m_data.GetPair( val );
	}
	bool CValueData::GetVector( Vector<float>& val ) const
	{
		return m_data.GetVector( val );
	}
	bool CValueData::GetQuat( Quat<float>& val ) const
	{
		return m_data.GetQuat( val );
	}
	bool CValueData::GetColor( Color4& val ) const
	{
		return m_data.GetColor( val );
	}
	bool CValueData::GetMatrix( Matrix<float>& val ) const
	{
		return m_data.GetMatrix( val );
	}
	bool CValueData::GetString( WString& val ) const
	{
		return m_data.GetString( val );
	}

	// GetEntryName
	const Key& CValueData::GetKey( void ) const
	{
		return m_key;
	}

	// Save
	bool CValueData::Save( void )
	{
		return false;
	}

	// Reload
	bool CValueData::Reload( void )
	{
		return false;
	}

} // namespace xeres
